<?php

class RegisterController {

	private $ret = "";
	private $status = "";
	private $stater = "";
	private $error = false;

	public function DoControll(Database $db) {
		$Rview = new RegisterView();
		$handler = new RegisterHandler($db);

		// Gör registerformuläret
		$this -> ret = $Rview -> DoRegisterBox();

		// Försöker användaren att registrera
		if ($Rview -> TriedToRegister()) {

			// Kollar så inte användaren redan finns
			if ($handler -> DoExists($Rview -> GetUserName())) {
				$this -> status .= $Rview -> Status(RegisterView::NAME_DOES_EXIST);
				$this -> error = true;
			}
			// Kollar om emailen redan finns
			if ($handler -> DoEmailExists($Rview -> GetEmail())) {
				$this -> status .= $Rview -> Status(RegisterView::EMAIL_DOES_EXIST);
				$this -> error = true;
			}
			// Kollar om namnet är tomt
			if ($handler -> IsEmpty($Rview -> GetUserName())) {
				$this -> status .= $Rview -> Status(RegisterView::NAME_IS_EMPTY);
				$this -> error = true;
			}
			// Kollar om emailen är tom
			if ($handler -> IsEmpty($Rview -> GetEmail())) {
				$this -> status .= $Rview -> Status(RegisterView::EMAIL_IS_EMPTY);
				$this -> error = true;
			}
			// Kollar om lösenordet är tomt
			if ($handler -> IsEmpty($Rview -> GetPassword())) {
				$this -> status .= $Rview -> Status(RegisterView::PASS_IS_EMPTY);
				$this -> error = true;
			}
			// Kollar om lösenorden matchar
			if ($Rview -> NotMatch($Rview -> GetPassword(), $Rview -> GetPassword2())) {
				$this -> status .= $Rview -> Status(RegisterView::PASS_NOT_EQUAL);
				$this -> error = true;
			}
			// Kollar om emailen matchar
			if ($Rview -> NotMatch($Rview -> GetEmail(), $Rview -> GetEmail2())) {
				$this -> status .= $Rview -> Status(RegisterView::EMAIL_NOT_EQUAL);
				$this -> error = true;
			}
			// Kollar om lösenordet stämmer överens med valideringen
			if ($handler -> validatePass($Rview -> GetPassword()) === false) {
				$this -> status .= $Rview -> Status(RegisterView::PASS_NOT_GOOD);
				$this -> error = true;
			}
			// Kollar om emailen stämmer överens med valideringen
			if ($handler -> validateEmail($Rview -> GetEmail()) === false) {
				$this -> status .= $Rview -> Status(RegisterView::NOT_AN_EMAIL);
				$this -> error = true;
			}
			// Namnet måste minst va 3 tecken
			if ($handler -> nameLessThanThree($Rview -> GetUserName())) {
				$this -> status .= $Rview -> Status(RegisterView::NAME_MIN_THREE);
				$this -> error = true;
			}

			// Kollar så det inte är några fel
			if ($this -> error === false) {
				// Registrerar
				if ($handler -> DoRegister($Rview -> GetUserName(), $Rview -> GetPassword(), $Rview -> GetEmail())) {
					$this -> status = $Rview -> Status(RegisterView::USER_REGISTER);
				}
			}
			// Fixar till statusen
			$this -> stater = $Rview -> getErrors($this -> status);

		}
		// retunerar allt roligt
		return $this -> ret . $this -> stater;

	}

}
